{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "10ab9ca7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import mindspore\n",
    "# 载入mindspore的默认数据集\n",
    "import mindspore.dataset as ds\n",
    "\n",
    "import mindspore.dataset.transforms.c_transforms as C # 常用转化算子\n",
    "import mindspore.dataset.vision.c_transforms as CV # 图像转化算子\n",
    "from mindspore.common import dtype as mstype\n",
    "# mindspore的tensor\n",
    "from mindspore import Tensor\n",
    "\n",
    "\n",
    "# 各类网络层都在nn里面\n",
    "import mindspore.nn as nn\n",
    "# 参数初始化的方式\n",
    "\n",
    "from mindspore.common.initializer import TruncatedNormal\n",
    "# 设置mindspore运行的环境\n",
    "from mindspore import context\n",
    "# 引入训练时候会使用到回调函数，如checkpoint, lossMoniter\n",
    "from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor, TimeMonitor\n",
    "# 引入模型\n",
    "from mindspore.train import Model\n",
    "# 引入评估模型的包\n",
    "from mindspore.nn.metrics import Accuracy\n",
    "\n",
    "# numpy\n",
    "import numpy as np\n",
    "# 画图用\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2f4ecd1e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data prepared\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import requests \n",
    "import zipfile\n",
    "\n",
    "current_path = os.getcwd()\n",
    "filename = 'cifar10_mindspore.zip'\n",
    "\n",
    "\n",
    "#将打包的文件解压\n",
    "with zipfile.ZipFile(filename, 'r') as f:\n",
    "    for file in f.namelist():\n",
    "        f.extract(file, current_path)\n",
    "\n",
    "# 删除文件\n",
    "os.remove(os.path.join(current_path,filename)) \n",
    "\n",
    "print('data prepared')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "88290b03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#创建图像标签列表\n",
    "category_dict = {0:'airplane',1:'automobile',2:'bird',3:'cat',4:'deer',5:'dog',\n",
    "                 6:'frog',7:'horse',8:'ship',9:'truck'}\n",
    "\n",
    "cifar_ds = ds.Cifar10Dataset('./data/10-verify-bin')\n",
    "# 设置图像大小\n",
    "plt.figure(figsize=(8,8))\n",
    "i = 1\n",
    "# 打印9张子图\n",
    "for dic in cifar_ds.create_dict_iterator():\n",
    "    plt.subplot(3,3,i)\n",
    "    plt.imshow(dic['image'].asnumpy())\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    plt.axis('off')\n",
    "    plt.title(category_dict[dic['label'].asnumpy().sum()])\n",
    "    i +=1\n",
    "    if i > 9 :\n",
    "        break\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "b7487979",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(datapath):\n",
    "    cifar_ds = ds.Cifar10Dataset(datapath)\n",
    "    return cifar_ds\n",
    "\n",
    "def process_dataset(cifar_ds,batch_size =32,status=\"train\"):\n",
    "    '''\n",
    "    ---- 定义算子 ----\n",
    "    '''\n",
    "    # 归一化\n",
    "    rescale = 1.0 / 255.0\n",
    "    # 平移\n",
    "    shift = 0.0\n",
    "\n",
    "    resize_op = CV.Resize((32, 32))\n",
    "    rescale_op = CV.Rescale(rescale, shift)\n",
    "    # 对于RGB三通道分别设定mean和std\n",
    "    normalize_op = CV.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))\n",
    "    if status == \"train\":\n",
    "        # 随机裁剪\n",
    "        random_crop_op = CV.RandomCrop([32, 32], [4, 4, 4, 4])\n",
    "        # 随机翻转\n",
    "        random_horizontal_op = CV.RandomHorizontalFlip()\n",
    "    # 通道变化\n",
    "    channel_swap_op = CV.HWC2CHW()\n",
    "    # 类型变化\n",
    "    typecast_op = C.TypeCast(mstype.int32)\n",
    "\n",
    "    '''\n",
    "    ---- 算子运算 ----\n",
    "    '''\n",
    "    cifar_ds = cifar_ds.map(input_columns=\"label\", operations=typecast_op)\n",
    "    if status == \"train\":\n",
    "        cifar_ds = cifar_ds.map(input_columns=\"image\", operations=random_crop_op)\n",
    "        cifar_ds = cifar_ds.map(input_columns=\"image\", operations=random_horizontal_op)\n",
    "    cifar_ds = cifar_ds.map(input_columns=\"image\", operations=resize_op)\n",
    "    cifar_ds = cifar_ds.map(input_columns=\"image\", operations=rescale_op)\n",
    "    cifar_ds = cifar_ds.map(input_columns=\"image\", operations=normalize_op)\n",
    "    cifar_ds = cifar_ds.map(input_columns=\"image\", operations=channel_swap_op)\n",
    "\n",
    "    # shuffle\n",
    "    cifar_ds = cifar_ds.shuffle(buffer_size=1000)\n",
    "    # 切分数据集到batch_size\n",
    "    cifar_ds = cifar_ds.batch(batch_size, drop_remainder=True)\n",
    "\n",
    "    return cifar_ds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "11ab7f07",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_path='./data/10-batches-bin'\n",
    "batch_size=32\n",
    "status=\"train\"\n",
    "\n",
    "# 生成训练数据集\n",
    "cifar_ds = get_data(data_path)\n",
    "ds_train = process_dataset(cifar_ds,batch_size =batch_size, status=status)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "dfdf5370",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"LeNet.\"\"\"\n",
    "\n",
    "\n",
    "def conv(in_channels, out_channels, kernel_size, stride=1, padding=0):\n",
    "    \"\"\"weight initial for conv layer\"\"\"\n",
    "    weight = weight_variable()\n",
    "    return nn.Conv2d(in_channels, out_channels,\n",
    "                     kernel_size=kernel_size, stride=stride, padding=padding,\n",
    "                     weight_init=weight, has_bias=False, pad_mode=\"valid\")\n",
    "\n",
    "\n",
    "def fc_with_initialize(input_channels, out_channels):\n",
    "    \"\"\"weight initial for fc layer\"\"\"\n",
    "    weight = weight_variable()\n",
    "    bias = weight_variable()\n",
    "    return nn.Dense(input_channels, out_channels, weight, bias)\n",
    "\n",
    "\n",
    "def weight_variable():\n",
    "    \"\"\"weight initial\"\"\"\n",
    "    return TruncatedNormal(0.02)\n",
    "\n",
    "\n",
    "class LeNet5(nn.Cell):\n",
    "    \"\"\"\n",
    "    Lenet network\n",
    "\n",
    "    Args:\n",
    "        num_class (int): Num classes. Default: 10.\n",
    "\n",
    "    Returns:\n",
    "        Tensor, output tensor\n",
    "    Examples:\n",
    "        >>> LeNet(num_class=10)\n",
    "\n",
    "    \"\"\"\n",
    "    def __init__(self, num_class=10, channel=3):\n",
    "        super(LeNet5, self).__init__()\n",
    "        self.num_class = num_class\n",
    "        self.conv1 = conv(channel, 6, 5)\n",
    "        self.conv2 = conv(6, 16, 5)\n",
    "        self.fc1 = fc_with_initialize(16 * 5 * 5, 120)\n",
    "        self.fc2 = fc_with_initialize(120, 84)\n",
    "        self.fc3 = fc_with_initialize(84, self.num_class)\n",
    "        self.relu = nn.ReLU()\n",
    "        self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)\n",
    "        self.flatten = nn.Flatten()\n",
    "\n",
    "    def construct(self, x):\n",
    "        x = self.conv1(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        x = self.conv2(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        x = self.flatten(x)\n",
    "        x = self.fc1(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.fc2(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.fc3(x)\n",
    "        return x\n",
    "\n",
    "# 构建网络\n",
    "network = LeNet5(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "57284489",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置模型的设备与图的模式\n",
    "context.set_context(mode=context.GRAPH_MODE, device_target='CPU')\n",
    "# 使用交叉熵函数作为损失函数\n",
    "net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction=\"mean\")\n",
    "# 优化器为momentum\n",
    "net_opt = nn.Momentum(params=network.trainable_params(), learning_rate=0.01, momentum=0.9)\n",
    "# 监控每个epoch训练的时间\n",
    "time_cb = TimeMonitor(data_size=ds_train.get_dataset_size())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "9219a401",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============== Starting Training ==============\n",
      "epoch: 1 step: 200, loss is 2.2860458\n",
      "epoch: 1 step: 400, loss is 2.304349\n",
      "epoch: 1 step: 600, loss is 2.3024175\n",
      "epoch: 1 step: 800, loss is 2.311098\n",
      "epoch: 1 step: 1000, loss is 2.3048565\n",
      "epoch: 1 step: 1200, loss is 2.3035986\n",
      "epoch: 1 step: 1400, loss is 2.2837524\n",
      "epoch time: 27001.827 ms, per step time: 17.287 ms\n",
      "epoch: 2 step: 38, loss is 1.9732412\n",
      "epoch: 2 step: 238, loss is 1.7656024\n",
      "epoch: 2 step: 438, loss is 1.7464726\n",
      "epoch: 2 step: 638, loss is 1.8352543\n",
      "epoch: 2 step: 838, loss is 1.7298076\n",
      "epoch: 2 step: 1038, loss is 1.5187061\n",
      "epoch: 2 step: 1238, loss is 1.5573447\n",
      "epoch: 2 step: 1438, loss is 1.669871\n",
      "epoch time: 28415.459 ms, per step time: 18.192 ms\n",
      "epoch: 3 step: 76, loss is 2.1076448\n",
      "epoch: 3 step: 276, loss is 1.8007027\n",
      "epoch: 3 step: 476, loss is 1.6617775\n",
      "epoch: 3 step: 676, loss is 1.6998059\n",
      "epoch: 3 step: 876, loss is 1.5679998\n",
      "epoch: 3 step: 1076, loss is 1.3683971\n",
      "epoch: 3 step: 1276, loss is 1.5676265\n",
      "epoch: 3 step: 1476, loss is 1.8062832\n",
      "epoch time: 31282.257 ms, per step time: 20.027 ms\n",
      "epoch: 4 step: 114, loss is 1.6044053\n",
      "epoch: 4 step: 314, loss is 1.0707291\n",
      "epoch: 4 step: 514, loss is 1.4045016\n",
      "epoch: 4 step: 714, loss is 1.3711541\n",
      "epoch: 4 step: 914, loss is 1.524842\n",
      "epoch: 4 step: 1114, loss is 1.5460184\n",
      "epoch: 4 step: 1314, loss is 1.6448094\n",
      "epoch: 4 step: 1514, loss is 1.3400548\n",
      "epoch time: 27902.220 ms, per step time: 17.863 ms\n",
      "epoch: 5 step: 152, loss is 1.4998206\n",
      "epoch: 5 step: 352, loss is 1.110507\n",
      "epoch: 5 step: 552, loss is 1.5758853\n",
      "epoch: 5 step: 752, loss is 1.4702376\n",
      "epoch: 5 step: 952, loss is 1.6841183\n",
      "epoch: 5 step: 1152, loss is 1.0896231\n",
      "epoch: 5 step: 1352, loss is 1.1249763\n",
      "epoch: 5 step: 1552, loss is 1.6515701\n",
      "epoch time: 28971.940 ms, per step time: 18.548 ms\n",
      "epoch: 6 step: 190, loss is 1.4243093\n",
      "epoch: 6 step: 390, loss is 1.5067348\n",
      "epoch: 6 step: 590, loss is 1.6582288\n",
      "epoch: 6 step: 790, loss is 1.48103\n",
      "epoch: 6 step: 990, loss is 1.3849691\n",
      "epoch: 6 step: 1190, loss is 1.7891172\n",
      "epoch: 6 step: 1390, loss is 1.4465029\n",
      "epoch time: 29924.406 ms, per step time: 19.158 ms\n",
      "epoch: 7 step: 28, loss is 1.1091453\n",
      "epoch: 7 step: 228, loss is 1.561806\n",
      "epoch: 7 step: 428, loss is 1.3813264\n",
      "epoch: 7 step: 628, loss is 1.3081499\n",
      "epoch: 7 step: 828, loss is 1.0597379\n",
      "epoch: 7 step: 1028, loss is 1.3024507\n",
      "epoch: 7 step: 1228, loss is 1.5088454\n",
      "epoch: 7 step: 1428, loss is 1.4993757\n",
      "epoch time: 29280.327 ms, per step time: 18.745 ms\n",
      "epoch: 8 step: 66, loss is 1.2246923\n",
      "epoch: 8 step: 266, loss is 1.877241\n",
      "epoch: 8 step: 466, loss is 1.5999284\n",
      "epoch: 8 step: 666, loss is 1.1379839\n",
      "epoch: 8 step: 866, loss is 1.2732215\n",
      "epoch: 8 step: 1066, loss is 1.8493329\n",
      "epoch: 8 step: 1266, loss is 1.3225578\n",
      "epoch: 8 step: 1466, loss is 1.4922311\n",
      "epoch time: 31457.283 ms, per step time: 20.139 ms\n",
      "epoch: 9 step: 104, loss is 1.2652271\n",
      "epoch: 9 step: 304, loss is 1.5859485\n",
      "epoch: 9 step: 504, loss is 1.4178433\n",
      "epoch: 9 step: 704, loss is 1.6307714\n",
      "epoch: 9 step: 904, loss is 1.401978\n",
      "epoch: 9 step: 1104, loss is 1.7448416\n",
      "epoch: 9 step: 1304, loss is 1.5319185\n",
      "epoch: 9 step: 1504, loss is 1.2431409\n",
      "epoch time: 32933.826 ms, per step time: 21.084 ms\n",
      "epoch: 10 step: 142, loss is 1.3298801\n",
      "epoch: 10 step: 342, loss is 1.6036795\n",
      "epoch: 10 step: 542, loss is 1.4272869\n",
      "epoch: 10 step: 742, loss is 1.7145681\n",
      "epoch: 10 step: 942, loss is 1.5543286\n",
      "epoch: 10 step: 1142, loss is 1.260009\n",
      "epoch: 10 step: 1342, loss is 1.3659621\n",
      "epoch: 10 step: 1542, loss is 1.4571517\n",
      "epoch time: 29548.050 ms, per step time: 18.917 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'Accuracy': 0.549955985915493}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 设置CheckpointConfig，callback函数。save_checkpoint_steps=训练总数/batch_size\n",
    "config_ck = CheckpointConfig(save_checkpoint_steps=1562,\n",
    "                             keep_checkpoint_max=10)\n",
    "ckpoint_cb = ModelCheckpoint(prefix=\"checkpoint_lenet_original\", directory='./results',config=config_ck)\n",
    "# 建立可训练模型\n",
    "model = Model(network = network, loss_fn=net_loss,optimizer=net_opt, metrics={\"Accuracy\": Accuracy()})\n",
    "print(\"============== Starting Training ==============\")\n",
    "\n",
    "model.train(10, ds_train,callbacks=[time_cb, ckpoint_cb, LossMonitor(per_print_times=200)],dataset_sink_mode=False)\n",
    "model.eval(ds_train, dataset_sink_mode=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "2c1813c0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Accuracy': 0.5837339743589743}\n"
     ]
    }
   ],
   "source": [
    "data_path='./data/10-verify-bin'\n",
    "batch_size=32\n",
    "status=\"test\"\n",
    "\n",
    "# 生成测试数据集\n",
    "cifar_ds = ds.Cifar10Dataset(data_path)\n",
    "ds_eval = process_dataset(cifar_ds,batch_size=batch_size,status=status)\n",
    "\n",
    "res = model.eval(ds_eval, dataset_sink_mode=False)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "9e4e4f5c",
   "metadata": {},
   "outputs": [],
   "source": [
    "class LeNet5_2(nn.Cell):\n",
    "    \"\"\"\n",
    "    Lenet network\n",
    "\n",
    "\n",
    "    Args:\n",
    "        num_class (int): Num classes. Default: 10.\n",
    "\n",
    "    Returns:\n",
    "        Tensor, output tensor\n",
    "    Examples:\n",
    "        >>> LeNet(num_class=10)\n",
    "\n",
    "    \"\"\"\n",
    "    def __init__(self, num_class=10, channel=3):\n",
    "        super(LeNet5_2, self).__init__()\n",
    "        self.num_class = num_class\n",
    "        self.conv1 = conv(channel, 64, 3)\n",
    "        self.conv2 = conv(64, 128, 3)\n",
    "        self.conv3 = conv(128, 128, 3)\n",
    "        self.fc1 = fc_with_initialize(512, 120)\n",
    "        self.fc2 = fc_with_initialize(120, 84)\n",
    "        self.fc3 = fc_with_initialize(84, self.num_class)\n",
    "        self.relu = nn.ReLU()\n",
    "        self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)\n",
    "        self.flatten = nn.Flatten()\n",
    "\n",
    "\n",
    "\n",
    "    def construct(self, x):\n",
    "        x = self.conv1(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        x = self.conv2(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        x = self.conv3(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.max_pool2d(x)\n",
    "        x = self.flatten(x)\n",
    "        x = self.fc1(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.fc2(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.fc3(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "681b7814",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============== Starting Training ==============\n",
      "epoch: 1 step: 200, loss is 2.2992842\n",
      "epoch: 1 step: 400, loss is 2.3131595\n",
      "epoch: 1 step: 600, loss is 2.316635\n",
      "epoch: 1 step: 800, loss is 2.2964616\n",
      "epoch: 1 step: 1000, loss is 2.2998493\n",
      "epoch: 1 step: 1200, loss is 2.3086882\n",
      "epoch: 1 step: 1400, loss is 2.303595\n",
      "epoch time: 116691.276 ms, per step time: 74.706 ms\n",
      "epoch: 2 step: 38, loss is 2.3014965\n",
      "epoch: 2 step: 238, loss is 2.2880921\n",
      "epoch: 2 step: 438, loss is 2.217205\n",
      "epoch: 2 step: 638, loss is 1.9291342\n",
      "epoch: 2 step: 838, loss is 2.0025077\n",
      "epoch: 2 step: 1038, loss is 1.6825894\n",
      "epoch: 2 step: 1238, loss is 1.8698596\n",
      "epoch: 2 step: 1438, loss is 1.8991\n",
      "epoch time: 116259.172 ms, per step time: 74.430 ms\n",
      "epoch: 3 step: 76, loss is 1.6331626\n",
      "epoch: 3 step: 276, loss is 1.4441807\n",
      "epoch: 3 step: 476, loss is 1.7424903\n",
      "epoch: 3 step: 676, loss is 1.3354291\n",
      "epoch: 3 step: 876, loss is 1.3573197\n",
      "epoch: 3 step: 1076, loss is 1.6035979\n",
      "epoch: 3 step: 1276, loss is 1.4463171\n",
      "epoch: 3 step: 1476, loss is 1.3717383\n",
      "epoch time: 111068.347 ms, per step time: 71.106 ms\n",
      "epoch: 4 step: 114, loss is 1.7629391\n",
      "epoch: 4 step: 314, loss is 1.0666881\n",
      "epoch: 4 step: 514, loss is 1.1333792\n",
      "epoch: 4 step: 714, loss is 1.0275391\n",
      "epoch: 4 step: 914, loss is 1.5018611\n",
      "epoch: 4 step: 1114, loss is 1.3415961\n",
      "epoch: 4 step: 1314, loss is 1.050612\n",
      "epoch: 4 step: 1514, loss is 1.0246977\n",
      "epoch time: 113070.232 ms, per step time: 72.388 ms\n",
      "epoch: 5 step: 152, loss is 1.0430424\n",
      "epoch: 5 step: 352, loss is 1.3104862\n",
      "epoch: 5 step: 552, loss is 1.0904412\n",
      "epoch: 5 step: 752, loss is 0.8254182\n",
      "epoch: 5 step: 952, loss is 1.0906843\n",
      "epoch: 5 step: 1152, loss is 1.0427885\n",
      "epoch: 5 step: 1352, loss is 1.1060076\n",
      "epoch: 5 step: 1552, loss is 0.83255017\n",
      "epoch time: 111873.364 ms, per step time: 71.622 ms\n",
      "epoch: 6 step: 190, loss is 1.0220505\n",
      "epoch: 6 step: 390, loss is 0.9171374\n",
      "epoch: 6 step: 590, loss is 0.8158456\n",
      "epoch: 6 step: 790, loss is 0.6615156\n",
      "epoch: 6 step: 990, loss is 0.8402027\n",
      "epoch: 6 step: 1190, loss is 1.1690012\n",
      "epoch: 6 step: 1390, loss is 1.005778\n",
      "epoch time: 114154.333 ms, per step time: 73.082 ms\n",
      "epoch: 7 step: 28, loss is 1.244761\n",
      "epoch: 7 step: 228, loss is 0.62856877\n",
      "epoch: 7 step: 428, loss is 1.065686\n",
      "epoch: 7 step: 628, loss is 1.0815052\n",
      "epoch: 7 step: 828, loss is 0.5521711\n",
      "epoch: 7 step: 1028, loss is 1.0645957\n",
      "epoch: 7 step: 1228, loss is 1.0096805\n",
      "epoch: 7 step: 1428, loss is 0.88375473\n",
      "epoch time: 116776.270 ms, per step time: 74.761 ms\n",
      "epoch: 8 step: 66, loss is 0.7388811\n",
      "epoch: 8 step: 266, loss is 1.1522955\n",
      "epoch: 8 step: 466, loss is 0.6813244\n",
      "epoch: 8 step: 666, loss is 0.84782964\n",
      "epoch: 8 step: 866, loss is 0.8808977\n",
      "epoch: 8 step: 1066, loss is 1.2257557\n",
      "epoch: 8 step: 1266, loss is 1.3494436\n",
      "epoch: 8 step: 1466, loss is 0.93368626\n",
      "epoch time: 117466.127 ms, per step time: 75.202 ms\n",
      "epoch: 9 step: 104, loss is 1.2800225\n",
      "epoch: 9 step: 304, loss is 0.66006863\n",
      "epoch: 9 step: 504, loss is 0.66194236\n",
      "epoch: 9 step: 704, loss is 0.84447086\n",
      "epoch: 9 step: 904, loss is 0.9403684\n",
      "epoch: 9 step: 1104, loss is 1.3157125\n",
      "epoch: 9 step: 1304, loss is 0.69753724\n",
      "epoch: 9 step: 1504, loss is 0.8850753\n",
      "epoch time: 113871.300 ms, per step time: 72.901 ms\n",
      "epoch: 10 step: 142, loss is 0.7114987\n",
      "epoch: 10 step: 342, loss is 0.9444921\n",
      "epoch: 10 step: 542, loss is 0.8878434\n",
      "epoch: 10 step: 742, loss is 0.8693167\n",
      "epoch: 10 step: 942, loss is 1.1736916\n",
      "epoch: 10 step: 1142, loss is 0.4704795\n",
      "epoch: 10 step: 1342, loss is 0.81288576\n",
      "epoch: 10 step: 1542, loss is 0.67060626\n",
      "epoch time: 112171.030 ms, per step time: 71.812 ms\n"
     ]
    }
   ],
   "source": [
    "network = LeNet5_2(10)\n",
    "# 设置模型的设备\n",
    "context.set_context(mode=context.GRAPH_MODE, device_target='CPU')\n",
    "# 使用交叉熵函数作为损失函数\n",
    "net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction=\"mean\")\n",
    "# 优化器为momentum\n",
    "net_opt = nn.Momentum(params=network.trainable_params(), learning_rate=0.01, momentum=0.9)\n",
    "# 时间监控，反馈每个epoch的运行时间\n",
    "time_cb = TimeMonitor(data_size=ds_train.get_dataset_size())\n",
    "# 设置callback函数。\n",
    "config_ck = CheckpointConfig(save_checkpoint_steps=1562,\n",
    "                             keep_checkpoint_max=10)\n",
    "ckpoint_cb = ModelCheckpoint(prefix=\"checkpoint_lenet_verified\",directory='./results', config=config_ck)\n",
    "# 建立可训练模型\n",
    "model = Model(network = network, loss_fn=net_loss,optimizer=net_opt, metrics={\"Accuracy\": Accuracy()})\n",
    "print(\"============== Starting Training ==============\")\n",
    "\n",
    "model.train(10, ds_train,callbacks=[time_cb, ckpoint_cb, LossMonitor(200)],dataset_sink_mode=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "b3ca2c8f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train results: {'Accuracy': 0.7209707106274008}\n",
      "test results: {'Accuracy': 0.7355769230769231}\n"
     ]
    }
   ],
   "source": [
    "data_path='./data/10-verify-bin'\n",
    "batch_size=32\n",
    "status=\"test\"\n",
    "ds_eval = get_data(data_path)\n",
    "ds_eval = process_dataset(cifar_ds=ds_eval,batch_size=batch_size,status=status)\n",
    "\n",
    "res_train = model.eval(ds_train, dataset_sink_mode=False)\n",
    "res_test = model.eval(ds_eval, dataset_sink_mode=False)\n",
    "# 评估训练集\n",
    "print('train results:',res_train)\n",
    "# 评估测试集\n",
    "print('test results:',res_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "55a3dc3c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 9 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#创建图像标签列表\n",
    "category_dict = {0:'airplane',1:'automobile',2:'bird',3:'cat',4:'deer',5:'dog',\n",
    "                 6:'frog',7:'horse',8:'ship',9:'truck'}\n",
    "\n",
    "cifar_ds = get_data('./data/10-verify-bin')\n",
    "df_test = process_dataset(cifar_ds,batch_size=1,status='test')\n",
    "\n",
    "def normalization(data):\n",
    "    _range = np.max(data) - np.min(data)\n",
    "    return (data - np.min(data)) / _range\n",
    "\n",
    "# 设置图像大小\n",
    "plt.figure(figsize=(10,10))\n",
    "i = 1\n",
    "# 打印9张子图\n",
    "for dic in df_test:\n",
    "    # 预测单张图片\n",
    "    input_img = dic[0]\n",
    "    output = model.predict(Tensor(input_img))\n",
    "    output = nn.Softmax()(output)\n",
    "    # 反馈可能性最大的类别\n",
    "    predicted = np.argmax(output.asnumpy(),axis=1)[0]\n",
    "\n",
    "    # 可视化\n",
    "    plt.subplot(3,3,i)\n",
    "    # 删除batch维度\n",
    "    input_image = np.squeeze(input_img.asnumpy(),axis=0).transpose(1,2,0)\n",
    "    # 重新归一化，方便可视化\n",
    "    input_image = normalization(input_image)\n",
    "    plt.imshow(input_image)\n",
    "    plt.xticks([])\n",
    "    plt.yticks([])\n",
    "    plt.axis('off')\n",
    "    plt.title('True label:%s,\\n Predicted:%s'%(category_dict[dic[1].asnumpy().sum()],category_dict[predicted]))\n",
    "    i +=1\n",
    "    if i > 9 :\n",
    "        break\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "5e50127c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============== Starting Training ==============\n",
      "epoch: 1 step: 200, loss is 2.3033361\n",
      "epoch: 1 step: 400, loss is 2.3021395\n",
      "epoch: 1 step: 600, loss is 2.3065913\n",
      "epoch: 1 step: 800, loss is 2.3100545\n",
      "epoch: 1 step: 1000, loss is 2.3064432\n",
      "epoch: 1 step: 1200, loss is 2.307184\n",
      "epoch: 1 step: 1400, loss is 2.2992544\n",
      "epoch time: 119369.777 ms, per step time: 76.421 ms\n",
      "epoch: 2 step: 38, loss is 2.300259\n",
      "epoch: 2 step: 238, loss is 2.3018572\n",
      "epoch: 2 step: 438, loss is 2.2934453\n",
      "epoch: 2 step: 638, loss is 2.2090786\n",
      "epoch: 2 step: 838, loss is 2.129168\n",
      "epoch: 2 step: 1038, loss is 1.9169266\n",
      "epoch: 2 step: 1238, loss is 2.0845263\n",
      "epoch: 2 step: 1438, loss is 1.9806935\n",
      "epoch time: 118196.460 ms, per step time: 75.670 ms\n",
      "epoch: 3 step: 76, loss is 1.7708509\n",
      "epoch: 3 step: 276, loss is 1.7707807\n",
      "epoch: 3 step: 476, loss is 1.5252371\n",
      "epoch: 3 step: 676, loss is 1.5817974\n",
      "epoch: 3 step: 876, loss is 1.266215\n",
      "epoch: 3 step: 1076, loss is 1.4601219\n",
      "epoch: 3 step: 1276, loss is 1.7435924\n",
      "epoch: 3 step: 1476, loss is 1.7414309\n",
      "epoch time: 117446.285 ms, per step time: 75.190 ms\n",
      "epoch: 4 step: 114, loss is 1.5786898\n",
      "epoch: 4 step: 314, loss is 1.4669456\n",
      "epoch: 4 step: 514, loss is 1.6904447\n",
      "epoch: 4 step: 714, loss is 1.3211915\n",
      "epoch: 4 step: 914, loss is 1.4558588\n",
      "epoch: 4 step: 1114, loss is 1.5518613\n",
      "epoch: 4 step: 1314, loss is 0.99607587\n",
      "epoch: 4 step: 1514, loss is 1.284811\n",
      "epoch time: 117352.522 ms, per step time: 75.130 ms\n",
      "epoch: 5 step: 152, loss is 1.6666502\n",
      "epoch: 5 step: 352, loss is 1.3408666\n",
      "epoch: 5 step: 552, loss is 1.3436569\n",
      "epoch: 5 step: 752, loss is 0.661015\n",
      "epoch: 5 step: 952, loss is 1.0286437\n",
      "epoch: 5 step: 1152, loss is 1.165894\n",
      "epoch: 5 step: 1352, loss is 0.82545924\n",
      "epoch: 5 step: 1552, loss is 1.3094717\n",
      "epoch time: 115688.278 ms, per step time: 74.064 ms\n",
      "epoch: 6 step: 190, loss is 0.7567239\n",
      "epoch: 6 step: 390, loss is 1.4611181\n",
      "epoch: 6 step: 590, loss is 1.2618717\n",
      "epoch: 6 step: 790, loss is 1.3303895\n",
      "epoch: 6 step: 990, loss is 0.8560599\n",
      "epoch: 6 step: 1190, loss is 1.1592505\n",
      "epoch: 6 step: 1390, loss is 0.8656592\n",
      "epoch time: 111264.915 ms, per step time: 71.232 ms\n",
      "epoch: 7 step: 28, loss is 1.262203\n",
      "epoch: 7 step: 228, loss is 0.97004896\n",
      "epoch: 7 step: 428, loss is 0.63635105\n",
      "epoch: 7 step: 628, loss is 0.79629093\n",
      "epoch: 7 step: 828, loss is 0.95340294\n",
      "epoch: 7 step: 1028, loss is 1.0392761\n",
      "epoch: 7 step: 1228, loss is 0.98832405\n",
      "epoch: 7 step: 1428, loss is 0.8235563\n",
      "epoch time: 119969.818 ms, per step time: 76.805 ms\n",
      "epoch: 8 step: 66, loss is 0.9103283\n",
      "epoch: 8 step: 266, loss is 0.6264247\n",
      "epoch: 8 step: 466, loss is 1.2598743\n",
      "epoch: 8 step: 666, loss is 0.613714\n",
      "epoch: 8 step: 866, loss is 1.2173717\n",
      "epoch: 8 step: 1066, loss is 1.190543\n",
      "epoch: 8 step: 1266, loss is 1.4898294\n",
      "epoch: 8 step: 1466, loss is 1.1088648\n",
      "epoch time: 119183.282 ms, per step time: 76.302 ms\n",
      "epoch: 9 step: 104, loss is 0.85420465\n",
      "epoch: 9 step: 304, loss is 0.83562076\n",
      "epoch: 9 step: 504, loss is 1.3856643\n",
      "epoch: 9 step: 704, loss is 1.0476545\n",
      "epoch: 9 step: 904, loss is 0.83766747\n",
      "epoch: 9 step: 1104, loss is 0.89000714\n",
      "epoch: 9 step: 1304, loss is 0.92749363\n",
      "epoch: 9 step: 1504, loss is 1.0206453\n",
      "epoch time: 122354.021 ms, per step time: 78.332 ms\n",
      "epoch: 10 step: 142, loss is 0.84173924\n",
      "epoch: 10 step: 342, loss is 0.67689663\n",
      "epoch: 10 step: 542, loss is 0.5837962\n",
      "epoch: 10 step: 742, loss is 0.6577047\n",
      "epoch: 10 step: 942, loss is 1.1431613\n",
      "epoch: 10 step: 1142, loss is 0.6803387\n",
      "epoch: 10 step: 1342, loss is 0.64814067\n",
      "epoch: 10 step: 1542, loss is 0.7862546\n",
      "epoch time: 117251.772 ms, per step time: 75.065 ms\n",
      "epoch: 11 step: 180, loss is 0.8758221\n",
      "epoch: 11 step: 380, loss is 0.67486006\n",
      "epoch: 11 step: 580, loss is 0.7741836\n",
      "epoch: 11 step: 780, loss is 0.57763827\n",
      "epoch: 11 step: 980, loss is 0.6555865\n",
      "epoch: 11 step: 1180, loss is 0.5986266\n",
      "epoch: 11 step: 1380, loss is 1.3445697\n",
      "epoch time: 119786.283 ms, per step time: 76.688 ms\n",
      "epoch: 12 step: 18, loss is 0.6515727\n",
      "epoch: 12 step: 218, loss is 0.71692777\n",
      "epoch: 12 step: 418, loss is 0.80164975\n",
      "epoch: 12 step: 618, loss is 0.7489496\n",
      "epoch: 12 step: 818, loss is 1.1307007\n",
      "epoch: 12 step: 1018, loss is 0.8402588\n",
      "epoch: 12 step: 1218, loss is 0.49146584\n",
      "epoch: 12 step: 1418, loss is 0.7443203\n",
      "epoch time: 117001.234 ms, per step time: 74.905 ms\n",
      "epoch: 13 step: 56, loss is 0.756994\n",
      "epoch: 13 step: 256, loss is 0.6369331\n",
      "epoch: 13 step: 456, loss is 1.1046658\n",
      "epoch: 13 step: 656, loss is 0.9137516\n",
      "epoch: 13 step: 856, loss is 0.72219026\n",
      "epoch: 13 step: 1056, loss is 0.7740015\n",
      "epoch: 13 step: 1256, loss is 0.32333127\n",
      "epoch: 13 step: 1456, loss is 0.60988814\n",
      "epoch time: 114066.088 ms, per step time: 73.026 ms\n",
      "epoch: 14 step: 94, loss is 0.46109363\n",
      "epoch: 14 step: 294, loss is 0.7188848\n",
      "epoch: 14 step: 494, loss is 0.7482945\n",
      "epoch: 14 step: 694, loss is 0.7600051\n",
      "epoch: 14 step: 894, loss is 0.6763958\n",
      "epoch: 14 step: 1094, loss is 0.84848076\n",
      "epoch: 14 step: 1294, loss is 0.99114114\n",
      "epoch: 14 step: 1494, loss is 1.0733867\n",
      "epoch time: 111828.525 ms, per step time: 71.593 ms\n",
      "epoch: 15 step: 132, loss is 0.66438615\n",
      "epoch: 15 step: 332, loss is 0.6799427\n",
      "epoch: 15 step: 532, loss is 1.1473279\n",
      "epoch: 15 step: 732, loss is 0.69524276\n",
      "epoch: 15 step: 932, loss is 0.679738\n",
      "epoch: 15 step: 1132, loss is 0.86758107\n",
      "epoch: 15 step: 1332, loss is 0.45900157\n",
      "epoch: 15 step: 1532, loss is 1.2401092\n",
      "epoch time: 112537.008 ms, per step time: 72.047 ms\n"
     ]
    }
   ],
   "source": [
    "network = LeNet5_2(10)\n",
    "# 设置模型的设备\n",
    "context.set_context(mode=context.GRAPH_MODE, device_target='CPU')\n",
    "# 使用交叉熵函数作为损失函数\n",
    "net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction=\"mean\")\n",
    "# 优化器为momentum\n",
    "net_opt = nn.Momentum(params=network.trainable_params(), learning_rate=0.01, momentum=0.9)\n",
    "# 时间监控，反馈每个epoch的运行时间\n",
    "time_cb = TimeMonitor(data_size=ds_train.get_dataset_size())\n",
    "# 设置callback函数。\n",
    "config_ck = CheckpointConfig(save_checkpoint_steps=1562,\n",
    "                             keep_checkpoint_max=10)\n",
    "ckpoint_cb = ModelCheckpoint(prefix=\"checkpoint_lenet_verified\",directory='./results', config=config_ck)\n",
    "# 建立可训练模型\n",
    "model = Model(network = network, loss_fn=net_loss,optimizer=net_opt, metrics={\"Accuracy\": Accuracy()})\n",
    "print(\"============== Starting Training ==============\")\n",
    "\n",
    "model.train(15, ds_train,callbacks=[time_cb, ckpoint_cb, LossMonitor(200)],dataset_sink_mode=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "2a3a6c90",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train results: {'Accuracy': 0.7640645006402048}\n",
      "test results: {'Accuracy': 0.7675280448717948}\n"
     ]
    }
   ],
   "source": [
    "data_path='./data/10-verify-bin'\n",
    "batch_size=32\n",
    "status=\"test\"\n",
    "ds_eval = get_data(data_path)\n",
    "ds_eval = process_dataset(cifar_ds=ds_eval,batch_size=batch_size,status=status)\n",
    "\n",
    "res_train = model.eval(ds_train, dataset_sink_mode=False)\n",
    "res_test = model.eval(ds_eval, dataset_sink_mode=False)\n",
    "# 评估训练集\n",
    "print('train results:',res_train)\n",
    "# 评估测试集\n",
    "print('test results:',res_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85292f66",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
